
$.fn.extend({
  //---元素拖动插件
  dragging: function (data) {
    var $this = $(this);
    var xPage;
    var yPage;
    var X;
    var Y;
    var xRand = 0;
    var yRand = 0;
    var father = $this.parent();
    var defaults = {
      move: 'both',
      randomPosition: true,
      hander: 1
    }
    var opt = $.extend({}, defaults, data);
    var movePosition = opt.move;
    var random = opt.randomPosition;

    var hander = opt.hander;

    if (hander == 1) {
      hander = $this;
    } else {
      hander = $this.find(opt.hander);
    }

    //---初始化
    father.css({ "position": "relative", "overflow": "hidden" });
    $this.css({ "position": "absolute" });
    hander.css({ "cursor": "move" });

    var faWidth = father.width();
    var faHeight = father.height();
    var thisWidth = $this.width() + parseInt($this.css('padding-left')) + parseInt($this.css('padding-right'));
    var thisHeight = $this.height() + parseInt($this.css('padding-top')) + parseInt($this.css('padding-bottom'));

    var mDown = false;
    var positionX;
    var positionY;
    var moveX;
    var moveY;

    if (random) {
      $thisRandom();
    }
    function $thisRandom() {
      //随机函数
      $this.each(function (index) {
        var randY = parseInt(Math.random() * (faHeight - thisHeight));///
        var randX = parseInt(Math.random() * (faWidth - thisWidth));///
        if (movePosition.toLowerCase() == 'x') {
          $(this).css({
            left: randX
          });
        } else if (movePosition.toLowerCase() == 'y') {
          $(this).css({
            top: randY
          });
        } else if (movePosition.toLowerCase() == 'both') {
          $(this).css({
            top: randY,
            left: randX
          });
        }

      });
    }

    hander.mousedown(function (e) {
      father.children().css({ "zIndex": "0" });
      $this.css({ "zIndex": "1" });
      mDown = true;
      X = e.pageX;
      Y = e.pageY;
      positionX = $this.position().left;
      positionY = $this.position().top;
      return false;
    });

    $(document).mouseup(function (e) {
      mDown = false;
    });

    $(document).mousemove(function (e) {
      xPage = e.pageX;
      moveX = positionX + xPage - X;

      yPage = e.pageY;
      moveY = positionY + yPage - Y;

      function thisXMove() {
        //x轴移动
        if (mDown == true) {
          $this.css({ "left": moveX });
        } else {
          return;
        }
        if (moveX < 0) {
          $this.css({ "left": "0" });
        }
        if (moveX > (faWidth - thisWidth)) {
          $this.css({ "left": faWidth - thisWidth });
        }
        return moveX;
      }

      function thisYMove() {
        //y轴移动
        if (mDown == true) {
          $this.css({ "top": moveY });
        } else {
          return;
        }
        if (moveY < 0) {
          $this.css({ "top": "0" });
        }
        if (moveY > (faHeight - thisHeight)) {
          $this.css({ "top": faHeight - thisHeight });
        }
        return moveY;
      }

      function thisAllMove() {
        //全部移动
        if (mDown == true) {
          $this.css({ "left": moveX, "top": moveY });
        } else {
          return;
        }
        if (moveX < 0) {
          $this.css({ "left": "0" });
        }
        if (moveX > (faWidth - thisWidth)) {
          $this.css({ "left": faWidth - thisWidth });
        }

        if (moveY < 0) {
          $this.css({ "top": "0" });
        }
        if (moveY > (faHeight - thisHeight)) {
          $this.css({ "top": faHeight - thisHeight });
        }
      }

      if (movePosition.toLowerCase() == "x") {
        thisXMove();
      } else if (movePosition.toLowerCase() == "y") {
        thisYMove();
      } else if (movePosition.toLowerCase() == 'both') {
        thisAllMove();
      }
    });
  }
});
